package org.lanqiao.tjut.arrys;

import java.util.Arrays;

public class testdriver {
	/*
	 * 一维数组
	 * 
	 * 数组  一组类型相同的数据集合到一块连续存储空间进行存储的数据结构
	 * 数组  数组类型相同 连续存储空间  可以使用数组下标直接访问该下标中的数据元素
	 * 数组名其实是数组在内存中的入口地址：下标相当于偏移量 所以 可以通过数组名[下标直接获取该存储单元的函数值]
	 * 数组声明
	 * 数组类型[]变量名=初始值  //推荐使用格式
	 * 数据类型 变量名[]=初始值
	 * 数组初始化中的new操作符永远是申请内存空间的（不光在数组中）
	 * new在Java中就是用来申请存储空间的
	 *  int[]arr0={}没有存储空间的  有new 才有
	 *  数组的下标是从 0 开始
	 *  数组的临时空间一旦初始化完成 则不可再改变 数组的存储大小是不变的
	 *  数组有默认初始值
	 *  数组是引用类型 数组作为参数传递的时候 传递的是入口地址
	 *  引用类型作为参数传递的永远是地址引用
	 *  基本类型、string类型作为参数传递的是值
	 *  
	 *  arrays工具类的sort方法对数组进行排序
	 *  
	 *  
	 * 例如
	 * int[]arr0=new int[数组维数]
	 */

	public static void main(String[] args) {
		
		// TODO Auto-generated method stub
		test01();
		sortArr();
		arrInitAndIterate();
		arrExtends();
		
		
		
		

	}
	/*
	 * 数组实例
	 */
	private static void test01(){
		//数组的声明
		//int[] arr3;
		int[] arr0=new int[3];//数组的维度
		int[] arr1;
		arr1=new int[3];
		//初始化方式
		//直接赋值
		int[] arr2=new int[]{1,2,3};
		//直接使用大括号集合的方式 只能在声明的定义中使用
		int[] arr3={1,2,3};
		
		
		int i;
		
	}
	private static void arrInitAndIterate(){
		//声明一个长度3的数组
		int[] arr0=new int[]{1,2,4};
		//遍历数组
		System.out.println("数组下标直接遍历数组元素");
		System.out.println("arr0第一个元素;"+arr0[0]);
		System.out.println("arr0第一个元素;"+arr0[1]);
		System.out.println("arr0第一个元素;"+arr0[2]);
		System.out.println("使用for循环直接遍历数组元素;");
	    System.out.println("使用for循环直接遍历数组元素:");
		for(int i=0;i<arr0.length;i++){//length属性是数组的长度
		System.out.println("arr0第"+(i+1)+"个元素:"+arr0[i]);
		
		
		
		
		
		
		
		
	}
	
	System.out.println("使用增强型的for循环直接遍历数组元素:");
		// TODO Auto-generated method stub
	for (int ii : arr0){
		System.out.println("arr0元素:"+ii);
		

	}
	
	
	/*
	 * ii....临时变量 通过循环依次使用临时变量ii从指定的遍历集合对象中取出元素的值
	 * arr0...被遍历的集合对象
	 * :....表示临时变量和被遍历集合之间的一个所属关系 临时变量的类型同数组的类型相同
	 */

	}
	private static void sortArr(){
		//声明初始化数组
		int[] arr0={4,3,7,9,2,1};
		System.out.println("数组排序前:");
		printArr(arr0);
		
		//调用array工具类的sort方法对数组进行排序
		Arrays.sort(arr0);
		System.out.println("数组排序后(升序/倒序):");
		printArr(arr0);
		
		
	}
	/*
	 * 打印素组元素的内容
	 * @Parma arr
	 * 被打印数组
	 * 
	 */
	private static void printArr(int[] arr){
		System.out.println("数组元素为:");
		for(int i=0;i<arr.length;i++){
			System.out.println(""+arr[i]);
		}
		//最后来一个换行
		System.out.println();
		
	}
	private static void printarr(int[] arr){
		System.out.println("数组元素为:");
	for(int i=arr.length-1;i>=0;i--){
		System.out.println(""+arr[i]);
	}
	}
	//数组的扩展
	private static void arrExtends(){
		//定义原始数组
		int[] a={1,2,3};//原始数组
		//定义一个新数组 长度为原来2倍
		int[] b=new int[a.length*2];
		//将旧数组中的值对应复制到新数组中
		for(int i=0;i<a.length ;i++){
			//赋值
			b[i]=a[i];
		}
		//将旧数组名执行新数组的地址入口
		a=b;
		//输出新扩展的数组内容
		System.out.println("新数组的内容");
		printArr(a);
			
		
		
	
			
			
		
		
	}
}